# -*- coding: utf-8 -*-
'''
Created on 17 de Abr de 2011

@author: Eduardo Cardeira

Este ficheiro contém a classe ObterEstatisticas que serve para gerar várias informações a partir da base de dados Rebides.

'''

# Imports Necessários
import sqlite3

class ObterEstatisticas():
    
    # Inicializa variáveis da classe
    def __init__(self):
        
        self.conn = sqlite3.connect("rebides.db")
        self.cursor = self.conn.cursor()        
        
    pass
    
    # Devolve o nº de docentes por ano
    def obter_docentes_ano(self, ano):
        
        if ano <= 9 and ano >= 0:
        
            self.cursor.execute("""SELECT COUNT (docente) FROM fichas_docencia WHERE ano = '{0}'""".format(ano))
        
            nDocentes = self.cursor.fetchall()
        
            return str(nDocentes).strip("[(u' ,)]")
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass

    # Devolve o nº de docentes por estabelecimento e ano
    def obter_docentes_ano_estabelecimento(self, ano, estabelecimento):
        
        if ano <= 9 and ano >= 0:
        
            self.cursor.execute("""SELECT COUNT (docente) 
                                   FROM fichas_docencia 
                                   WHERE ano = '{0}' 
                                   AND estabelecimento = '{1}'""".format(ano, estabelecimento))
        
            nDocentes = self.cursor.fetchall()
        
            return str(nDocentes).strip("[(u' ,)]")
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass

    # Devolve o nº de docentes por grau e ano
    def obter_docentes_ano_grau(self, ano, grau):
        
        if ano <= 9 and ano >= 0:
        
            self.cursor.execute("""SELECT COUNT (docente) 
                                   FROM fichas_docencia 
                                   WHERE ano = '{0}' 
                                   AND grau = '{1}'""".format(ano, grau))
        
            nDocentes = self.cursor.fetchall()
        
            return str(nDocentes).strip("[(u' ,)]")
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass

    # Devolve o nº de docentes por grau, ano e estabelecimento
    def obter_docentes_ano_grau_estabelecimento(self, ano, grau, estabelecimento):
        
        if ano <= 9 and ano >= 0:
        
            self.cursor.execute("""SELECT COUNT (docente) 
                                   FROM fichas_docencia 
                                   WHERE ano = '{0}' 
                                   AND grau = '{1}'
                                   AND estabelecimento = '{2}'""".format(ano, grau, estabelecimento))
        
            nDocentes = self.cursor.fetchall()
        
            return str(nDocentes).strip("[(u' ,)]")
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass

    # Devolve uma lista dos estabelecimentos existentes num determinado ano
    def listar_estabelecimentos_ano(self, ano):
        
        if ano <= 9 and ano >= 0:
            
            self.cursor.execute("""SELECT (estabelecimento) 
                                   FROM fichas_docencia 
                                   WHERE ano = '{0}'""".format(ano))
            
            lista = []
            
            selection = self.cursor.fetchall()
        
            
            for i in range(len(selection)):
            
                estabelecimento = str(selection[i][0])
                
                if estabelecimento.strip("(u',)") not in lista:
                
                    lista.insert(i, estabelecimento.strip("(u',)"))
        
            return lista
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass

    # Devolve uma lista dos docentes possuidores dum grau num determinado ano
    def listar_docentes_ano_grau(self, ano, grau):
        
        if ano <= 9 and ano >= 0:
            
            self.cursor.execute("""SELECT (docente) 
                                   FROM fichas_docencia 
                                   WHERE ano = '{0}'
                                   AND grau = '{1}'""".format(ano, grau))
            
            lista = []
            
            selection = self.cursor.fetchall()
        
            
            for i in range(len(selection)):
            
                docente = str(selection[i][0])
                
                if docente.strip("(u',)") not in lista:
                    
                    lista.insert(i, docente.strip("(u',)"))
        
            return lista
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass

    # Devolve uma lista dos graus existentes num determinado ano
    def listar_graus_ano(self, ano):
        
        if ano <= 9 and ano >= 0:
            
            self.cursor.execute("""SELECT (grau) 
                                   FROM fichas_docencia 
                                   WHERE ano = '{0}'""".format(ano))
            
            lista = []
            
            selection = self.cursor.fetchall()
        
            
            for i in range(len(selection)):
            
                grau = str(selection[i][0])
                
                if grau.strip("(u',)") not in lista:
                    
                    lista.insert(i, grau.strip("(u',)"))
        
            return lista
        
        else:
            
            return "ERRO - O ano tem de ser entre 0 e 9!"
        
    pass


# Testes para verificar se os métodos estão a funcionar:

#stat_list = ObterEstatisticas()

#nDocentes = stat_list.obter_docentes_ano(0)
#print "Nº de docentes por ano: "
#print nDocentes
#print "\n"

#nDocentes = stat_list.obter_docentes_ano_estabelecimento(0, "Universidade Fernando Pessoa")
#print "Nº de docentes por ano e estabelecimento: "
#print nDocentes
#print "\n"

#nDocentes = stat_list.obter_docentes_ano_grau(9, "Doutor")
#print "Nº de docentes por ano e grau: "
#print nDocentes
#print "\n"

#nDocentes = stat_list.obter_docentes_ano_grau_estabelecimento(9, "Doutor", "Universidade Fernando Pessoa")
#print "Nº de docentes por ano, grau e estabelecimento: "
#print nDocentes
#print "\n"

#listaEstabelecimentos = stat_list.listar_estabelecimentos_ano(0)
#print "Lista de estabecimentos por ano: "
#for i in listaEstabelecimentos:
#    print i
#print "\n"

#listaDocentes = stat_list.listar_docentes_ano_grau(0, 'Doutoramento')
#print "Lista de docentes por ano e grau: "
#for i in listaDocentes:
#    print i
#print "\n"
